Lịch sử C_Sharp_(ngôn_ngữ_lập_trình)

Từ C và âm nhạc đến C#

Cái tên "C sharp" được lấy cảm hứng từ ký hiệu âm nhạc, trong đó một dấu thăng sau nốt nhạc "#" nghĩa là một nốt được chơi cao hơn nửa cung.[16] Điều này tương tự như trường hợp đặt tên của ngôn ngữ của C++, trong đó "++" chỉ ra rằng giá trị của một biến nên được tăng lên 1. Biểu tượng # cũng giống với bốn ký tự "+" (trong một lưới 2x2), ngụ ý rằng ngôn ngữ là một phiên bản tăng cường của C++ (gấp đôi C++).[17]Bởi vì giới hạn kỹ thuật của việc hiển thị (các font chuẩn, trình duyệt...) và sự thật là ký tự thăng (U+266F ♯ MUSIC SHARP SIGN (HTML ♯)) không hiện diện trong đa số các bàn phím, ký tự (U+0023 # NUMBER SIGN (HTML #)) đã được chọn để diễn đạt một cách tương đương trong cách viết tên ngôn ngữ.

Hậu tố "#" đã được sử dụng bởi một số ngôn ngữ khác của.NET là các biến thể của các ngôn ngữ hiện tại, bao gồm J# (một ngôn ngữ.NET cũng được thiết kế bởi Microsoft có nguồn gốc từ Java 1.1), A# (từ Ada) và ngôn ngữ lập trình chức năng F#.[18] Việc triển khai ban đầu của Eiffel for.NET được gọi là Eiffel#[19]. Hậu tố cũng đã được sử dụng cho các thư viện, chẳng hạn như Gtk# (một wrapper NET cho GTK+ và các thư viện GNOME khác) và Cocoa#.

Các phiên bản (versions)

Phiên bảnĐặc tả ngôn ngữNgày phát hành.NET FrameworkVisual Studio
ECMAISO/IECMicrosoft
C# 1.0Tháng 12 năm 2002Tháng 4 năm 2003Tháng 1 năm 2002Tháng 1 năm 2002.NET Framework 1.0Visual Studio.NET 2002
C# 1.1
C# 1.2
Tháng 10 năm 2003Tháng 4 năm 2003.NET Framework 1.1Visual Studio.NET 2003
C# 2.0Tháng 6 năm 2006Tháng 9 năm 2006Tháng 9 2005[note 2]Tháng 11 năm 2005.NET Framework 2.0Visual Studio 2005
C# 3.0Không[note 3]Tháng 8 năm 2007Tháng 11 năm 2007

.NET Framework 2.0 (Except LINQ)[20]
.NET Framework 3.0 (Except LINQ)[20]
.NET Framework 3.5

Visual Studio 2008
Visual Studio 2010
C# 4.0Tháng 4 năm 2010Tháng 4 năm 2010.NET Framework 4Visual Studio 2010
C# 5.0Trong quá trình[21]Không[note 4]Tháng 6 năm 2013Tháng 8 năm 2012.NET Framework 4.5Visual Studio 2012
Visual Studio 2013
C# 6.0Không[note 5]Bản nhápTháng 7 năm 2015.NET Framework 4.6Visual Studio 2015
C# 7.0KhôngTháng 3 năm 2017.NET Framework 4.6.2Visual Studio 2017
C# 7.1KhôngKhôngKhôngTháng 8 năm 2017.NET Framework 4.6.2Visual Studio 2017 phiên bản 15.3[22]
C# 7.2KhôngKhôngKhôngTháng 11 năm 2017.NET Framework 4.7.1Visual Studio 2017 phiên bản 15.5[23]
C# 7.3KhôngTháng 5 năm 2018Tháng 5 năm 2018.NET Core 2.1

.NET Core 2.2

.NET Framework 4.8

Visual Studio 2017 phiên bản 15.7
C# 8.0Tháng 9 năm 2019Tháng 9 năm 2019.NET Core 3.0Visual Studio 2019 phiên bản 16.3
C# 9.0Tháng 11 năm 202013 Tháng 11 năm 2020.NET 5.0Visual Studio 2019 phiên bản 16.8

Các tính năng mới

C# 2.0[24]

  • Generics
  • Partial types
  • Hàm Anonymous
  • Iterators
  • Các kiểu Nullable
  • Khả năng tiếp cận getter/setter riêng biệt
  • Phương pháp nhóm chuyển đổi (delegate)
  • Co- và Contra-variance cho các delegates (delegate)
  • Các lớp static
  • Delegate inference

C# 3.0[25]

  • LINQ[26]
  • Cải tiến trong việc khởi tạo đối tượng: Customer c = new Customer(); c.Name="James"; có thể viết là Customer c = new Customer { Name="James" };
  • Các biểu thức lambda: listOfFoo.Where(delegate(Foo x) { return x.size>10;}) trở thành listOfFoo.Where(x => x.size>10);
  • Mặc định gõ các biến cục bộ, ví dụ var x = "hello"; có thể hoán đổi với string x = "hello";
  • Các property được tự động hiện thực hóa
  • Các kiểu anonymous
  • Các hàm extension
  • Cây biểu thức
  • Các hàm dạng partial

C# 4.0[27]

  • Dynamic binding
  • Đối số được đặt tên và tùy chọn
  • Co- và contravariance dạng generic
  • Các kiểu interop nhúng ("NoPIA")

C# 5.0[28]

  • Các hàm asynchronous
  • Tìm thông tin thành phần gọi hàm

C# 6.0[29]

  • Compiler-as-a-service (Roslyn)
  • Nhập các thành viên kiểu static vào không gian tên.
  • Exception filters
  • Await trong các khối catch/finally
  • Tự động cài đặt property
  • Các thành viên trong thân biểu thức
  • Toán tử kiểm tra null
  • Chuỗi nội suy
  • Toán tử nameof

C# 7.0[30]

  • Các biến out
  • Pattern matching
  • Tuple
  • Deconstruction
  • Các hàm cục bộ
  • Kiểu ValueTask
  • Constructor and finalizer trong thân biểu thức
  • Getter và setter trong thân biểu thức
  • Throw cũng có thể được dùng làm biểu thức

C# 7.1[31]

  • Async main
  • Tên các phần tử tuple được nội suy

C# 7.2[19 1]

  • Reference ngữ nghĩa với các loại giá trị
  • Các đối số được đặt tên không có đuôi
  • Giới hạn truy cập private protected cho các field

C# 7.3[19 1]

  • Tuple hỗ trợ toán tử == và !=
  • Quá tải phương thức in.
  • Mở rộng các biến biểu thức trong trình khởi tạo.
  • Đính kèm attribute vào trường sao lưu cho các thuộc tính được triiển khai tự động.

C# 8.0[19 1] Hỗ trợ trong.NET Core 3.0 và.NET Standard 2.1 trở lên

  • Kiểu tham chiếu nullable (Nullable reference types)
  • Hỗ trợ biến thành viên chỉ đọc cho struct (Readonly Members)
  • Phương thức mặc định trong interface (Default interface methods)
  • Hàm cục bộ tĩnh (Static local functions).
  • Mở rộng pattern matching cho biểu thức swich expressions, property patterns, tuple pattern, positional pattern (More patterns in more places)
  • Phạm vi và chỉ số (Ranges and indices)
  • Cải thiện khai báo từ khóa using (Using declarations)
  • Toán tử kiểm tra và gán khi biến là null (Null- coalescing asignment)
  • Luồng bất đồng bộ (Asynchronous stream)
  • Asynchronous disposable
  • Unmanaged constructed types
  • Stackalloc in nested expressions
  • Enhancement of interpolated verbatim strings

C# 9.0[19 1] Hỗ trợ trong.NET 5.0 trở lên

  • Bản ghi (Record)
  • Thuộc tính bất biến (Init only setters
  • Biểu thức cấp cao nhất (Top-level statements).
    • Trước C# 9.0: using System; class ExampleClass {     static void Main(string[] args)     {         Console.WriteLine("Hello World!");     } }
    • Bắt đầu từ C# 9.0: using System; Console.WriteLine("Hello World!");
  • Pattern matching enhancements
  • Native sized integers
  • Function pointers
  • Suppress emitting locals init flag
  • Target-typed new expressions
  • static anonymous functions
  • Target-typed conditional expressions
  • Covariant return types
  • Extension GetEnumerator support for foreach loops
  • Lambda discard parameters
  • Attributes on local functions
  • Module initializers

Tài liệu tham khảo

WikiPedia: C_Sharp_(ngôn_ngữ_lập_trình) http://www.computerworld.com.au/article/261958/a-z... http://www.computerworld.com.au/article/261958/a-z... http://www.barrycornelius.com/papers/java5/ http://www.barrycornelius.com/papers/java5/onefile... http://chapel.cray.com/spec/spec-0.98.pdf http://www.dammio.com/2016/12/03/phan-1-linq-gioi-... http://www.danielmoth.com/Blog/using-c-30-from-net... http://www.dotnetspace.com http://www.jameskovacs.com/blog/CNETHistoryLesson.... http://www.levenez.com/lang/